<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>受控组件</title>
    </head>
    <body>
        <div id="root"></div>

        <script src="../js/react.development.js"></script>
        <script src="../js/react-dom.development.js"></script>
        <script src="../js/babel.min.js"></script>

        <script type="text/babel">
            //高阶函数
            /***
             * 如果一个函数, 它的返回值或者它的参数是函数, 则该函数就是一个高阶函数
             * setTimeout  Promise  arr.forEach(item => {})   map   filter   高阶函数
             * bind  返回一个新函数  call apply不是高阶函数
             */
            function fn(){
                return function(){}
            }

            function fn2(arg, arg2){
                    arg();
            }



            class App extends React.Component {
                //1. 声明 state
                state = {
                    username: '',
                    password: ''
                }
                render() {
                    return (
                        <div>
                            <h2>登录</h2>
                            <form action="" onSubmit={this.submit}>
                                {/*2. 将 input 的 value 设置为 state 中的属性值*/}
                                {/*3. 设置 input 元素的 onChange 事件*/}
                                用户名: <input type="text" name="username" value={this.state.username} 
                                    onChange={this.saveData} />
                                <br />
                                密码: <input type="text" name="password" value={this.state.password}  
                                    onChange={this.saveData}  />
                                <br />
                                <button>登录</button>
                            </form>
                        </div>
                    );
                }
                submit = (e) => {
                    //查看用户名的值
                    console.log('用户名的值为: ' + this.state.username);
                    console.log('用户的密码为: ' + this.state.password);
                    e.preventDefault();
                }

                saveData = e => {
                    //获取要修改的属性的名字
                    let type = e.target.name;
                    this.setState({
                        [type]: e.target.value
                    })
                }

            }

            ReactDOM.render(<App />, document.querySelector("#root"));
        </script>
    </body>
</html>
